home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / pc / SNNSV32.ZIP / SNNSv3.2 / xgui / sources / cc_main.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-04-25  |  16.7 KB  |  518 lines

  1. /*****************************************************************************
  2.   FILE           : cc_main.c
  3.   SHORTNAME      : cc_main.c
  4.   SNNS VERSION   : 3.2
  5.  
  6.   PURPOSE        : Creates the CASCADE-window. 
  7.   NOTES          :
  8.  
  9.   AUTHOR         : Michael Schmalzl  
  10.   DATE           : 23.2.93
  11.  
  12.   CHANGED BY     : Michael Schmalzl
  13.   IDENTIFICATION : @(#)cc_main.c    1.13 3/2/94
  14.   SCCS VERSION   : 1.13
  15.   LAST CHANGE    : 3/2/94
  16.  
  17.              Copyright (c) 1990-1994  SNNS Group, IPVR, Univ. Stuttgart, FRG
  18.  
  19. ******************************************************************************/
  20. #include <stdio.h>
  21. #include <X11/Xlib.h>
  22. #include <X11/Xutil.h>
  23. #include <X11/Xos.h>
  24. #include <X11/cursorfont.h>
  25. #include <X11/Intrinsic.h>
  26. #include <X11/StringDefs.h>
  27. #include <X11/Shell.h>
  28. #include <X11/Xaw/Box.h>
  29. #include <X11/Xaw/Simple.h>
  30. #include <X11/Xaw/Grip.h>
  31. #include <X11/Xaw/Form.h>
  32. #include <X11/Xaw/SmeBSB.h>
  33. #include <X11/Xaw/SmeLine.h>
  34. #include <X11/Xaw/Viewport.h>
  35. #include <X11/Xaw/Label.h>
  36. #include <X11/Xaw/Toggle.h>
  37. #include <X11/Xaw/Command.h>
  38. #include <X11/Xaw/Cardinals.h>
  39. #include <X11/Xaw/AsciiText.h>
  40. #include <X11/Xaw/MenuButton.h>
  41. #include <X11/Xaw/Scrollbar.h>
  42. #include <X11/Xaw/SimpleMenu.h>
  43.  
  44. #include "ui.h"
  45. #include "ui_xWidgets.h"
  46. #include "kr_typ.h"
  47. #include "kr_ui.h"
  48. #include "glob_typ.h" 
  49. #include "ui_netUpdate.h"
  50. #include "ui_display.h"
  51. #include "ui_main.h"
  52. #include "ui_mainP.h"
  53. #include "ui_confirmer.h"
  54. #include "cc_type.h"
  55. #include "cc_mac.h"
  56. #include "cc_rcc.h"
  57. #include "ui_remote.h"
  58. #include "done.xbm"
  59. #include "delete_cand_units.xbm"
  60.  
  61. #include "cc_main.ph"
  62.  
  63. /*****************************************************************************
  64.   FUNCTION :
  65.  
  66.   PURPOSE  : 
  67.   NOTES    :
  68.  
  69.   UPDATE   : 8.2.93
  70. ******************************************************************************/
  71.  
  72. static void cc_centerString(char *string, int length1, int length2)
  73. {
  74.  int i,difference,move;
  75.  
  76.  if((difference=(length2 - length1)) >=2) {
  77.    move = difference / 2;
  78.    for(i=length1-1;i>=0;i--) {
  79.      string[i+move] = string[i];
  80.    }
  81.    for(i=0;i<move;i++){
  82.      string[i] = ' ';
  83.    }
  84.  }
  85. }
  86.        
  87.  
  88. /*****************************************************************************
  89.   FUNCTION :
  90.  
  91.   PURPOSE  : 
  92.   NOTES    :
  93.  
  94.   UPDATE   : 8.2.93
  95. ******************************************************************************/
  96.  
  97. static void cc_selectActFuncCand(Widget w, int value, caddr_t call_data)
  98. {
  99.  switch(value) {
  100.    case ASYM_SIGMOID: ui_xSetLabel(cc_w10b,"Act_Logistic");
  101.                       break;
  102.    case SYM_SIGMOID : ui_xSetLabel(cc_w10b,"Act_LogSym");
  103.                       break;
  104.    case TANH        : ui_xSetLabel(cc_w10b,"Act_TanH");
  105.                       break;
  106.    case RANDOM      : ui_xSetLabel(cc_w10b,"Act_Random");
  107.                       break;
  108.  }
  109.  cc_data.CAND.actFunc = cc_candActFunc = value;
  110. }
  111.  
  112. /*****************************************************************************
  113.   FUNCTION :
  114.  
  115.   PURPOSE  : 
  116.   NOTES    :
  117.  
  118.   UPDATE   : 8.2.93
  119. ******************************************************************************/
  120.  
  121. static void cc_selectOnOff(Widget w, int value, caddr_t call_data)
  122. {
  123.  switch(value) {
  124.    case ON:   ui_xSetLabel(cc_w13b,"on");
  125.               break;
  126.    case OFF : ui_xSetLabel(cc_w13b,"off");
  127.               break;
  128.  }
  129.  cc_data.GLOBAL.onOff = cc_onOff = value;
  130. }
  131.  
  132. /*****************************************************************************
  133.   FUNCTION :
  134.  
  135.   PURPOSE  : 
  136.   NOTES    :
  137.  
  138.   UPDATE   : 8.2.93
  139. ******************************************************************************/
  140.  
  141. static void cc_selectLearningFunc(Widget w, int value, caddr_t call_data)
  142. {
  143.  switch(value) {
  144.    case QUICKPROP: ui_xSetLabel(cc_w11b,"Quickprop");
  145.                    break;
  146.    case BACKPROP : ui_xSetLabel(cc_w11b,"Backprop");
  147.                    break;
  148.    case RPROP    : ui_xSetLabel(cc_w11b,"Rprop");
  149.                    break;
  150.  }
  151.  cc_data.GLOBAL.learningFunc = cc_learningFunc = value;
  152. }
  153.  
  154. /*****************************************************************************
  155.   FUNCTION :
  156.  
  157.   PURPOSE  : 
  158.   NOTES    :
  159.  
  160.   UPDATE   : 8.2.93
  161. ******************************************************************************/
  162.  
  163. static void cc_deleteCandUnits(Widget w, int value, caddr_t call_data)
  164. {
  165.  cc_deleteAllSpecialUnits();
  166.  ui_net_completeRefresh(ui_currentDisplay,2);
  167. }
  168.  
  169. /*****************************************************************************
  170.   FUNCTION :
  171.  
  172.   PURPOSE  : 
  173.   NOTES    :
  174.  
  175.   UPDATE   : 8.2.93
  176. ******************************************************************************/
  177.  
  178. void cc_readElements(void)
  179. {
  180.  
  181.  if((cc_onOff == -1) || (cc_learningFunc == -1) || (cc_candActFunc == -1)) {
  182.    cc_onOff        = cc_data.GLOBAL.onOff;
  183.    cc_learningFunc = cc_data.GLOBAL.learningFunc;
  184.    cc_candActFunc  = cc_data.CAND.actFunc;
  185.  }
  186.  
  187.  if(cc_open) {
  188.    cc_data.GLOBAL.pixelError         = ui_xFloatFromAsciiWidget(cc_w9b);
  189.    cc_data.GLOBAL.learningFunc       = cc_learningFunc;
  190.    cc_data.GLOBAL.onOff              = cc_onOff;
  191.    cc_data.CAND.covarianceChange     = ui_xFloatFromAsciiWidget(cc_w1b);
  192.    cc_data.CAND.candidatePatience    = ui_xIntFromAsciiWidget(cc_w2b); 
  193.    cc_data.CAND.maxNoOfUpdateCycles  = ui_xIntFromAsciiWidget(cc_w3b);
  194.    cc_data.CAND.maxNoOfCandUnits     = ui_xIntFromAsciiWidget(cc_w7b); 
  195.    cc_data.CAND.actFunc              = cc_candActFunc;
  196.    cc_data.OUT.errorChange           = ui_xFloatFromAsciiWidget(cc_w4b);
  197.    cc_data.OUT.outputPatience        = ui_xIntFromAsciiWidget(cc_w5b);
  198.    cc_data.OUT.maxNoOfUpdateCycles   = ui_xIntFromAsciiWidget(cc_w6b);
  199.  }
  200.  ui_learnParameters[6] = cc_data.GLOBAL.pixelError;       
  201.  ui_learnParameters[7] = (float)cc_data.GLOBAL.learningFunc;   
  202.  ui_learnParameters[8] = (float)cc_data.GLOBAL.onOff; 
  203.           
  204.  ui_learnParameters[9]  = cc_data.CAND.covarianceChange;  
  205.  ui_learnParameters[10] = cc_data.CAND.candidatePatience; 
  206.  ui_learnParameters[11] = cc_data.CAND.maxNoOfUpdateCycles; 
  207.  ui_learnParameters[12] = cc_data.CAND.maxNoOfCandUnits;  
  208.  ui_learnParameters[13] = (float)cc_data.CAND.actFunc;  
  209.          
  210.  ui_learnParameters[14] = cc_data.OUT.errorChange;        
  211.  ui_learnParameters[15] = cc_data.OUT.outputPatience;    
  212.  ui_learnParameters[16] = cc_data.OUT.maxNoOfUpdateCycles;
  213. }
  214.  
  215.  
  216. /*****************************************************************************
  217.   FUNCTION : cc_doneProc
  218.  
  219.   PURPOSE  : callback function of the done-buttom. You are leaving CC. The storage     
  220.              is deallocated.
  221.   NOTES    :
  222.  
  223.   UPDATE   : 3.4.1992
  224. ******************************************************************************/
  225.  
  226. static void cc_doneProc(void)
  227. {
  228.  cc_readElements();
  229.  XtDestroyWidget(cc_mainWidget);
  230.  cc_open = 0;
  231. }
  232.  
  233. /*****************************************************************************
  234.   FUNCTION : cc_xCreateButtonItem
  235.  
  236.   PURPOSE  : create a command widget
  237.   NOTES    :
  238.  
  239.   UPDATE   : 5.10.92
  240. ******************************************************************************/
  241.  
  242. static Widget cc_xCreateButtonItem (char *name, Widget parent, Widget left, Widget top)
  243. {
  244.     int n;
  245.     Widget   w;
  246.     Arg      arg[15];
  247.     
  248.     n = 0;
  249.  
  250.     if (strcmp (name, "done") == 0)
  251.       {  
  252.         XtSetArg(arg[n], XtNbitmap, 
  253.                   (Pixmap) XCreateBitmapFromData (ui_display,
  254.                    XDefaultRootWindow (ui_display), 
  255.                    done_bits, done_width, done_height)); n++;
  256.       } 
  257.  
  258.     if (strcmp (name, "delete_cand_units") == 0)
  259.       {  
  260.         XtSetArg(arg[n], XtNbitmap, 
  261.                   (Pixmap) XCreateBitmapFromData (ui_display,
  262.                    XDefaultRootWindow (ui_display), 
  263.                    delete_cand_units_bits, delete_cand_units_width, delete_cand_units_height)); n++;
  264.       } 
  265.  
  266.     XtSetArg(arg[n], XtNborderWidth, 0); n++;
  267.     XtSetArg(arg[n], XtNinternalHeight, 1); n++;
  268.     XtSetArg(arg[n], XtNinternalWidth , 1); n++; 
  269.  
  270.     XtSetArg(arg[n], XtNfromVert , top);  n++;
  271.     XtSetArg(arg[n], XtNfromHoriz, left);  n++;
  272.     XtSetArg(arg[n], XtNleft  , XtChainLeft); n++;
  273.     XtSetArg(arg[n], XtNright , XtChainLeft); n++;
  274.     XtSetArg(arg[n], XtNtop   , XtChainTop); n++;
  275.     XtSetArg(arg[n], XtNbottom, XtChainTop); n++;
  276.  
  277.     w = XtCreateManagedWidget(name, commandWidgetClass, parent, arg, (unsigned int) n);
  278.     return(w);
  279.  
  280. }
  281.  
  282. /*****************************************************************************
  283.   FUNCTION : cc_xCreateMenueButtonItem
  284.  
  285.   PURPOSE  : create a menue widget
  286.   NOTES    :
  287.  
  288.   UPDATE   : 5.10.92
  289. ******************************************************************************/
  290.  
  291. static Widget cc_xCreateMenueButtonItem (char *name, Widget parent, Widget left, Widget top, int dist)
  292. {
  293.     int n;
  294.     Widget   w;
  295.     Arg      arg[15];
  296.     
  297.     n = 0;
  298.  
  299.     XtSetArg(arg[n], XtNborderWidth, 1); n++;
  300.     XtSetArg(arg[n], XtNinternalHeight, 1); n++; 
  301.     XtSetArg(arg[n], XtNinternalWidth , 2); n++; 
  302.  
  303.     XtSetArg(arg[n], XtNhorizDistance , dist);  n++;
  304.     XtSetArg(arg[n], XtNfromVert , top);  n++;
  305.     XtSetArg(arg[n], XtNfromHoriz, left);  n++; 
  306.     XtSetArg(arg[n], XtNleft  , XtChainLeft); n++;
  307.     XtSetArg(arg[n], XtNright , XtChainLeft); n++;
  308.     XtSetArg(arg[n], XtNtop   , XtChainTop); n++;
  309.     XtSetArg(arg[n], XtNbottom, XtChainTop); n++;
  310. /*    XtSetArg(arg[n], XtNresizable,1); n++; */
  311.  
  312.     w = XtCreateManagedWidget(name, menuButtonWidgetClass, parent, arg, (unsigned int) n);
  313.     return(w);
  314.  
  315. }
  316.  
  317. /*****************************************************************************
  318.   FUNCTION : cc_createCandidatePannel
  319.  
  320.   PURPOSE  : creates the candidate pannel, which is part of the CC-window
  321.   NOTES    :
  322.  
  323.   UPDATE   : 5.10.92
  324. ******************************************************************************/
  325.  
  326.  
  327. static void cc_createCandidatePannel (Widget parent)
  328. {
  329.  Widget       form,menu,mItem,delete_cand_units;
  330.  Arg          arg[25];
  331.  Cardinal     n;
  332.  char         buf[20];
  333.  int          length1;
  334.   
  335.  n = 0;  
  336.  form = XtCreateManagedWidget ("pannel", formWidgetClass, parent, arg, n);
  337.  
  338.  cc_w0  = ui_xCreateLabelItem("          Candidate parameters",form,35*cc_fontWidth,NULL,NULL);
  339.  
  340.  cc_w1a = ui_xCreateLabelItem("Min. covariance change: ",form,30*cc_fontWidth,NULL,cc_w0);
  341.  sprintf(buf,"%.3f",cc_data.CAND.covarianceChange);
  342.  cc_w1b = ui_xCreateDialogItem ("cc_w1b",form,buf,6*cc_fontWidth,cc_w1a,cc_w0); 
  343.  
  344.  cc_w2a = ui_xCreateLabelItem("Candidate patience: ",form,30*cc_fontWidth,NULL,cc_w1a);
  345.  sprintf(buf,"%d",cc_data.CAND.candidatePatience);
  346.  cc_w2b = ui_xCreateDialogItem ("cc_w2b",form,buf,6*cc_fontWidth,cc_w2a,cc_w1a); 
  347.  
  348.  cc_w3a = ui_xCreateLabelItem("Max. no. of covariance updates: ",form,30*cc_fontWidth,NULL,cc_w2a);
  349.  sprintf(buf,"%d",cc_data.CAND.maxNoOfUpdateCycles);
  350.  cc_w3b = ui_xCreateDialogItem ("cc_w3b",form,buf,6*cc_fontWidth,cc_w3a,cc_w2a); 
  351.  
  352.  cc_w7a = ui_xCreateLabelItem("Max. no. of candidate units: ",form,30*cc_fontWidth,NULL,cc_w3a);
  353.  sprintf(buf,"%d",cc_data.CAND.maxNoOfCandUnits);
  354.  cc_w7b = ui_xCreateDialogItem ("cc_w7b",form,buf,6*cc_fontWidth,cc_w7a,cc_w3a); 
  355.  
  356.  cc_w10a = ui_xCreateLabelItem("Activation function: ",form,24*cc_fontWidth,NULL,cc_w7a);
  357.  length1 = strlen(cc_actFuncArray[cc_data.CAND.actFunc]);
  358.  sprintf(buf,"%-13s",cc_actFuncArray[cc_data.CAND.actFunc]);
  359.  cc_centerString(buf,length1,13);
  360.  cc_w10b = cc_xCreateMenueButtonItem (buf,form,cc_w10a,cc_w7a,5);
  361.  
  362.  menu     = XtCreatePopupShell("menu",simpleMenuWidgetClass,cc_w10b,NULL,ZERO);
  363.  
  364.  mItem    = XtCreateManagedWidget("Act_Logistic", smeBSBObjectClass,menu,NULL,ZERO);
  365.    XtAddCallback(mItem,XtNcallback,(XtCallbackProc)cc_selectActFuncCand,ASYM_SIGMOID);
  366.  mItem    = XtCreateManagedWidget("Act_LogSym", smeBSBObjectClass,menu,NULL,ZERO);
  367.    XtAddCallback(mItem,XtNcallback,(XtCallbackProc)cc_selectActFuncCand,(caddr_t)SYM_SIGMOID);
  368.  mItem    = XtCreateManagedWidget("Act_TanH", smeBSBObjectClass,menu,NULL,ZERO);
  369.    XtAddCallback(mItem,XtNcallback,(XtCallbackProc)cc_selectActFuncCand,(caddr_t)TANH);
  370.  mItem    = XtCreateManagedWidget("Act_Random", smeBSBObjectClass,menu,NULL,ZERO);
  371.    XtAddCallback(mItem,XtNcallback,(XtCallbackProc)cc_selectActFuncCand,(caddr_t)RANDOM);
  372.  
  373.  delete_cand_units = cc_xCreateButtonItem ("delete_cand_units",form,NULL,cc_w10a);
  374.    XtAddCallback(delete_cand_units,XtNcallback,(XtCallbackProc)cc_deleteCandUnits,(caddr_t)NULL);
  375.  
  376.  
  377. }
  378.  
  379. /*****************************************************************************
  380.   FUNCTION : cc_creatOutputPannel
  381.  
  382.   PURPOSE  : creates the output pannel, which is part of the CC-window
  383.   NOTES    :
  384.  
  385.   UPDATE   : 5.10.92
  386. ******************************************************************************/
  387.  
  388.  
  389. static void cc_createOutputPannel (Widget parent)
  390. {
  391.  Widget       form;
  392.  Arg          arg[25];
  393.  Cardinal     n;
  394.  char         buf[10];
  395.   
  396.  n = 0;  
  397.  form = XtCreateManagedWidget ("pannel", formWidgetClass, parent, arg, n);
  398.  
  399.  cc_w0  = ui_xCreateLabelItem("            Output parameters",form,35*cc_fontWidth,NULL,NULL);
  400.  
  401.  cc_w4a = ui_xCreateLabelItem("Error change: ",form,30*cc_fontWidth,NULL,cc_w0);
  402.  sprintf(buf,"%.3f",cc_data.OUT.errorChange);
  403.  cc_w4b = ui_xCreateDialogItem ("cc_w4b",form,buf,6*cc_fontWidth,cc_w4a,cc_w0); 
  404.  
  405.  cc_w5a = ui_xCreateLabelItem("Output patience: ",form,30*cc_fontWidth,NULL,cc_w4a);
  406.  sprintf(buf,"%d",cc_data.OUT.outputPatience);
  407.  cc_w5b = ui_xCreateDialogItem ("cc_w5b",form,buf,6*cc_fontWidth,cc_w5a,cc_w4a); 
  408.  
  409.  cc_w6a = ui_xCreateLabelItem("Max. no. of epochs: ",form,30*cc_fontWidth,NULL,cc_w5a);
  410.  sprintf(buf,"%d",cc_data.OUT.maxNoOfUpdateCycles);
  411.  cc_w6b = ui_xCreateDialogItem ("cc_w6b",form,buf,6*cc_fontWidth,cc_w6a,cc_w5a); 
  412.  
  413. }
  414.  
  415. /*****************************************************************************
  416.   FUNCTION : cc_createGlobalPannel
  417.  
  418.   PURPOSE  : creates the global pannel, which is part of the CC-window
  419.   NOTES    :
  420.  
  421.   UPDATE   : 5.10.92
  422. ******************************************************************************/
  423.  
  424.  
  425. static void cc_createGlobalPannel (Widget parent)
  426. {
  427.  Widget       form,menu,mItem;
  428.  Arg          arg[25];
  429.  Cardinal     n;
  430.  char         buf[15];
  431.  int          length1;
  432.   
  433.  n = 0;  
  434.  form = XtCreateManagedWidget("pannel", formWidgetClass, parent, arg, n);
  435.  
  436.  cc_w0  = ui_xCreateLabelItem("           Global parameters",form,35*cc_fontWidth,NULL,NULL);
  437.  
  438.  cc_w9a = ui_xCreateLabelItem("Max. output unit error:  ",form,30*cc_fontWidth,NULL,cc_w0);
  439.  sprintf(buf,"%.3f",cc_data.GLOBAL.pixelError);
  440.  cc_w9b = ui_xCreateDialogItem ("cc_w9b",form,buf,6*cc_fontWidth,cc_w9a,cc_w0);  
  441.  
  442.  cc_w11a = ui_xCreateLabelItem("Learning function: ",form,28*cc_fontWidth,NULL,cc_w9a);
  443.  length1 = strlen(cc_learningFuncArray[cc_data.GLOBAL.learningFunc]);
  444.  sprintf(buf,"%-9s",cc_learningFuncArray[cc_data.GLOBAL.learningFunc]);
  445.  cc_centerString(buf,length1,9); 
  446.  cc_w11b  = cc_xCreateMenueButtonItem (buf,form,cc_w11a,cc_w9a,1);
  447.  
  448.  menu     = XtCreatePopupShell("menu",simpleMenuWidgetClass,cc_w11b,NULL,ZERO);
  449.  
  450.  mItem    = XtCreateManagedWidget("Backprop", smeBSBObjectClass,menu,NULL,ZERO);
  451.    XtAddCallback(mItem,XtNcallback,(XtCallbackProc)cc_selectLearningFunc,(caddr_t)BACKPROP);
  452.  mItem    = XtCreateManagedWidget("Quickprop", smeBSBObjectClass,menu,NULL,ZERO);
  453.    XtAddCallback(mItem,XtNcallback,(XtCallbackProc)cc_selectLearningFunc,(caddr_t)QUICKPROP);
  454.  mItem    = XtCreateManagedWidget("Rprop", smeBSBObjectClass,menu,NULL,ZERO);
  455.  XtAddCallback(mItem,XtNcallback,(XtCallbackProc)cc_selectLearningFunc,(caddr_t)RPROP);
  456.  
  457.  cc_w13a = ui_xCreateLabelItem("Print covariance and error:",form,28*cc_fontWidth,NULL,cc_w11a);
  458.  length1 = strlen(cc_onOffArray[cc_data.GLOBAL.onOff]);
  459.  sprintf(buf,"%-9s",cc_onOffArray[cc_data.GLOBAL.onOff]);
  460.  cc_centerString(buf,length1,9); 
  461.  cc_w13b  = cc_xCreateMenueButtonItem (buf,form,cc_w13a,cc_w11a,1);
  462.  
  463.  menu     = XtCreatePopupShell("menu",simpleMenuWidgetClass,cc_w13b,NULL,ZERO);
  464.  
  465.  mItem    = XtCreateManagedWidget("on", smeBSBObjectClass,menu,NULL,ZERO);
  466.    XtAddCallback(mItem,XtNcallback,(XtCallbackProc)cc_selectOnOff,(caddr_t)ON);
  467.  mItem    = XtCreateManagedWidget("off", smeBSBObjectClass,menu,NULL,ZERO);
  468.    XtAddCallback(mItem,XtNcallback,(XtCallbackProc)cc_selectOnOff,(caddr_t)OFF);
  469. }
  470.  
  471.  
  472. /*****************************************************************************
  473.   FUNCTION : cc_createWindow
  474.  
  475.   PURPOSE  : creates the CC-window
  476.   NOTES    :
  477.  
  478.   UPDATE   : 5.10.92
  479. ******************************************************************************/
  480.  
  481.  
  482. void cc_createWindow (void)
  483. {
  484.     Widget       done,box;
  485.     Arg          arg[25];
  486.     Cardinal     n;
  487.     char         buf[40];
  488.  
  489.     if(!cc_open) {
  490.       cc_open = 1;
  491.       sprintf (buf, "Cascade");
  492.       n = 0;  
  493.       cc_mainWidget = XtCreatePopupShell(buf,topLevelShellWidgetClass,ui_toplevel,arg,n); 
  494.  
  495.       n = 0;  
  496.       box = XtCreateManagedWidget("box",boxWidgetClass,cc_mainWidget,arg,n);
  497.  
  498.       cc_createGlobalPannel(box);
  499.       cc_createCandidatePannel (box); 
  500.       cc_createOutputPannel(box);
  501.  
  502.       done = cc_xCreateButtonItem ("done",box,NULL,NULL);
  503.          XtAddCallback(done,XtNcallback,(XtCallbackProc)cc_doneProc,NULL); 
  504.  
  505.       ui_checkWindowPosition(cc_mainWidget);
  506.       XtPopup (cc_mainWidget, XtGrabNone);
  507.       ui_xDontResizeWidget(cc_mainWidget); 
  508.    }
  509.     else {
  510.       ui_confirmOk("CC window already exists !");
  511.     }
  512. }  
  513.  
  514.  
  515.  
  516. /* XtVaGetValues(cc_w1b,XtNwidth,&widgetWidth,XtNx,&widgetXPos,NULL); */
  517.  
  518.